perm filename FED.SAI[SAI,BGB] blob
sn#103918 filedate 1974-05-30 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00007 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "FED" COMMENT FILM EDITOR - BRUCE G. BAUMGART - MAY 1974
C00005 00003 REQUIRE "ABBREV[SYS,BGB]" SOURCE_FILE
C00006 00004 SUBR DPYF(ITG I) α DISPLAY I'TH FRAME
C00009 00005 SUBR OUTSNIP (STRING STR) α OUTPUT A SNIP OF FRAMES
C00011 00006 SUBR DPYB α DISPLAY A BAND OF IMAGES
C00013 00007 α MAIN EXECUTION
C00015 ENDMK
C⊗;
BEGIN "FED" COMMENT FILM EDITOR - BRUCE G. BAUMGART - MAY 1974;
COMMENT
FILM EDITOR DESIGN NOTES:
1. Data Rates.
Moderately interesting frame requires about 1K words.
24 Frames per second * 60 seconds per minute
= 1,440 frames 1 minute
2,880 frames 2 minutes
5,760 frames 4 minutes
11,520 frames 8 minutes
23,040 frames 16 minutes
46,080 frames 32 minutes
92,160 frames 64 minutes 86,400 frames per hour
2. Memory capacities.
CORE: 165K words.
Disk System: 5 packs * 17 Megawords/pack = 85 Megawords.
UDP: =7600 tracks * (=18 records of =128 word
+ 1 record of =32 words)
=7600 track * =2336 words per track = 17,753,600 words.
Librascope: 32 bands of 76K of 1024 words = 2,432K = 2,490,368 words.
Mag Tape: K/foot * 2400 feet per reel = 2.5 Megawords per tape.
3. Logical Structure.
Film maximum 3 hours 1 to 10 Acts.
Acts maximum 1 hour 1 to 10 Scenes.
Scenes 1 to 20 minutes 1 to 10 takes.
Takes 1 minute 1 to 100 snips
Snips 4 seconds 1 to 100 frames
Frames 1/24 second
4. Command functions:
Display a single III plot file.
Run a Snip of Film.
Single Step a film.
Merge frames of films into a snip file.
Unmerge a snip into a sequence of frames.
Frame repetition.
;
REQUIRE "ABBREV[SYS,BGB]" SOURCE_FILE;
DEFINE UPGIOT ="'703000000000";
DEFINE CALLI="'047000000000";
DEFINE SPCWAR ="'043000000000";
XSUBR CORGET;
XSUBR CORREL;
BEGIN "INNER"
SAFE ITG ARRAY DPYBUF [0:1]; α DISPLAY BUFFER HEADER;
ITG ARRAY FRAME [0:200];
ITG ARRAY SIZE [-28:200];
ITG I,J,FLG;
ITG PTR,SIZ;
SUBR DPYF(ITG I); α DISPLAY I'TH FRAME;
BEGIN "DPYF"
PTR ← FRAME[I];
SIZ ← SIZE[I];
S⊂ UPGIOT PTR;JFCL;⊃; α DISPLAY PIECE OF GLASS;
END "DPYF"; α BGB 28 MAY 1974 -------------------------------------------------;
SAFE ITG ARRAY INFO[0:10];
SUBR IFRAME (STRING STR;ITG I); α INPUT A SINGLE FRAME;
BEGIN "IFRAME"
ITG TMP;
SIZE[I] ← FRAME[I] ← 0;
OPEN(1,"DSK",8,3,0,0,0,0);LOOKUP(1,STR,FLG);
IF FLG THEN ⊂ RELEASE(1);RETURN;⊃;
FILEINFO(INFO);TMP←INFO[3];S⊂ MOVS TMP;MOVNM TMP;⊃;
OUTSTR(" FRAME "&CVS(I)&" FILE SIZE "&CVS(TMP));
WORDIN(1);SIZ ← WORDIN(1);OUTSTR(" "&CVS(SIZ));
ARRYIN(1,DPYBUF[PTR],SIZ);RELEASE(1);
FRAME[I]←LOCATION(DPYBUF[PTR]); α LOCATION OF FRAME;
SIZE[I]←SIZ;PTR←PTR+SIZ; α SIZE OF FRAME;
OUTSTR(" EOF"&↓);
END "IFRAME"; α BGB 28 MAY 1974 ----------------------------------------------;
SUBR INFRAMES(STRING STR); α INPUT A SEQUENCE OF FRAMES;
BEGIN "INFRAMES"
PTR ← 0;
S⊂ SETZ 2,;MOVEI 3,65000;PUSHJ '17,CORGET;JFCL;MOVEM 2,DPYBUF;⊃;
FOR I←0 THRU 150 DO IFRAME(STR&"."&CVS(I),I);
END "INFRAMES";
SUBR OUTSNIP (STRING STR); α OUTPUT A SNIP OF FRAMES;
BEGIN "OUTSNIP"
OPEN(1,"DSK",8,0,3,0,0,0);
ENTER(1,STR,FLG);
SIZE[-27] ← PTR; α SIZE OF SNIP IN WORDS;
ARRYOUT(1,SIZE[-28],128);
ARRYOUT(1,DPYBUF[0],PTR);
RELEASE(1);OUTSTR(" EOF."&↓);
END "OUTSNIP";
α ----------------------------------------------------------------------------;
SUBR INSNIP (STRING STR); α INPUT A SNIP OF FRAMES;
BEGIN "INSNIP"
ITG I;
OPEN(1,"DSK",15,3,0,0,0,0);
LOOKUP(1,STR,FLG);
IF FLG THEN ⊂ RELEASE(1);RETURN;⊃;
ARRYIN(1,SIZE[-28],128);
PTR ← (SIZE[-27] LOR 1)+1;
S⊂ SETZ 2,;MOVE 3,PTR; α ALLOCATE MEMORY SPACE;
PUSHJ '17,CORGET;JFCL;MOVEM 2,DPYBUF;⊃;
ARRYIN(1,DPYBUF[0],PTR);
RELEASE(1);OUTSTR(" EOF."&↓);
PTR ← 0;FOR I← 0 THRU 99 DO IF SIZE[I]≠0 THEN ⊂
FRAME[I]←LOCATION(DPYBUF[PTR]);PTR←PTR+SIZE[I];⊃ ELSE
FRAME[I]←0;
END "INSNIP";
SUBR DPYB; α DISPLAY A BAND OF IMAGES;
S⊂ "LOOP"
LABEL L0,L1,SA,L2,L3,EOL;
α FIRE UP SPACE WAR JOB;
L0: SETOM I;
MOVEI SA; α START ADDRESS OF SPACE WAR MODULE;
HRLI '400002; α RUN ON PDP-10 EVERY 1/30 OF A SECOND;
CALLI '400003; α SWCGO;
SETZ;CALLI '400021;MOVEM '10; α SEGNUM TO AC10;
CALLI '400017; α DETSEG;
α WAIT FOR FURTHER COMMANDS;
L1: '51000000001; α INCHRW WAIT FOR SPACE;
MOVE 2,1;ANDI 1,'177; α STRIP OF META-CTRL BITS;
CAIE 1,'40;JRST L1;
SPCWAR '636367; α STOP THE SPACE WAR MODULE;
MOVSI 1,'64240;'51000000001 3,; α OUTSTR(CRLF);
CALLI '10,'400016;JRST 4,; α ATTSEG FROM AC10;
JRST EOL;
α SPACE WAR MODULE;
SA: AOS 1,I;CAILE 1,160;SETZM I; α TEST FOR END OF LOOP;
MOVE 1,I; ADD 1,FRAME; α PTR ← PTR[I];
SKIPN 1,(1);JRST SA;MOVEM 1,PTR;
MOVE 1,I;ADD 1,SIZE;ADDI 1,28; α SIZ ← SIZE[I];
MOVE(1);MOVEM SIZ;
JRST 3,@L2;L2: L3; α LEAVE USER IOT MODE;
L3: UPGIOT PTR;JFCL; α DISPLAY PIECE OF GLASS;
CALLI '400024; α DISMIS SPACE WAR MODULE;
EOL: JFCL;
END "LOOP";
α MAIN EXECUTION;
BREAKSET(1," ","I");
OUTSTR(↓);
WHILE TRUE DO
BEGIN "LISTEN"
STRING CMLINE,CMD;
ITG CHR;
OUTSTR("*");
CMLINE ← INCHWL;
IF LENGTH(CMLINE)=0 THEN CONTINUE;
CMD ← SCAN(CMLINE,1,CHR);
IF EQU(CMD,"INPUT") THEN INFRAMES(CMLINE) ELSE
IF EQU(CMD,"IN") THEN INSNIP(CMLINE) ELSE
IF EQU(CMD,"OUT") THEN OUTSNIP(CMLINE) ELSE
IF EQU(CMD,"RUN") THEN DPYB ELSE
IF EQU(CMD,"FRAME") THEN DPYF(INTSCAN(CMLINE,CHR)) ELSE
IF EQU(CMD,"DPY") THEN ⊂ IFRAME(CMLINE,1);DPYF(1) ⊃ ELSE
IF EQU(CMD,"EXIT") THEN Q⊂ CALLI '12 ⊃ ELSE
OUTSTR(9&CMD&" ?"&↓);
END "LISTEN";
END "INNER"
END "FED";